#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    //以下为位运算符
    char a = 0b11011001;
    unsigned char b = 0b11110011;
    char c = a&b;
    printf("%hhx\n",c);//&,与运算符,每个位进行与运算,全一则输出一,否则输出0,结果为11010001

    char d = 0b11000001;
    char e = 0b00001100;

    char f = d|e;
    printf("%hhx\n",f);//|,或运算符,每个位进行或运算,其中有一输出一,全0输出0,结果为11001101

    char g = a >> 1;//>>右位移操作,将每个位的数据往右移,有符号情况下为数据运算,最左边为1时,位移之后会补1,结果为11101100
    printf ("%hhx\n",g);
    unsigned char i = b >> 1;//>>右位移操作,将每个位的数据往右移,无符号情况下为逻辑运算,最左边为1时,位移之后会补0,结果为01111001
    printf ("%hhx\n",i);
    char h = e << 1;//<<左位移操作,将每个位的数据往左移,结果为00011000
    printf ("%hhx\n",h);

    char ab = ~a;//~取反运算符,结果为00100110
    printf ("%hhx\n",ab);

    char ac = a^b;//^异或运算符,每个位进行异或运算,不同则输出1,相同输出0,结果为00101010
    printf ("%hhx\n",ac);

    
    return 0;
}
